# -*- coding: utf-8 -*-
# @Time    : 2024/7/12 16:14
# @Author  : yujiahao
# @File    : 23_fastapi_json_compatible_encoder.py
# @description:JSON 兼容编码器


from datetime import datetime
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel

# 定义一个伪数据库，使用字典来存储项目数据
fake_db = {}


# 定义一个 Pydantic 模型类，用于描述项目的数据结构
class Item(BaseModel):
    title: str  # 项目的标题，类型为字符串
    timestamp: datetime  # 项目的时间戳，类型为 datetime
    description: str | None = None  # 项目的描述，类型为可选字符串（可以为 None）


# 创建一个 FastAPI 应用实例
app = FastAPI()


# 定义一个路径操作，使用 PUT 方法更新指定 ID 的项目
@app.put("/items/{id}", tags=["updata_item"], response_model=fake_db, summary="简介", description="详细报道")
def update_item(id: str, item: Item):
    '''
    更新指定 ID 的项目数据，并将其存储在伪数据库中。

    参数:
    - id: 项目的 ID，类型为字符串
    - item: 包含项目数据的 Pydantic 模型对象

    返回:
    - 无返回值
    '''

    # 使用 jsonable_encoder 将 Pydantic 模型对象转换为 JSON 兼容的数据类型
    json_compatible_item_data = jsonable_encoder(item)

    # 将转换后的数据存储在伪数据库中，键为项目的 ID，值为 JSON 兼容的数据
    fake_db[id] = json_compatible_item_data

    return fake_db
